﻿using System;
using System.Collections.Generic;
using System.Text;
using Sinacor.Infra.UI.Common;


namespace Sinacor.UI.Bovespa.Operador.Presenter
{
    /// <summary>
    /// Presenter CadastroPreferenciasOperador
    /// Autor: Márcio Belarmino
    /// Data: 29/01/2009
    /// </summary>
    public class CadastroPreferenciasOperador : BasePresenter<ICadastroPreferenciasOperador>
    {
        #region Construtor
        public CadastroPreferenciasOperador(ICadastroPreferenciasOperador view)
            : base(view)
        {
            // Inicializar Communication Operador
            _communicationOperador = new Sinacor.UI.Bovespa.Operador.Communication.Operador(this.Session);

            // Inicializar Communication Negocios
            _communicationOrdens = new Sinacor.UI.Bovespa.Operador.Communication.Negocio(this.Session);

            // Inicializando models
            this.PreferenciasOperador = new Sinacor.UI.Bovespa.Operador.Model.Preferencias();
            this.BolsaSelecionada = new Sinacor.UI.Bovespa.Operador.Model.Bolsa();
            this.Bolsas = new ModelCollection<Model.Bolsa>();            
            
        }
        #endregion

        #region Atributos
        /// <summary>
        /// Bolsa selecionada
        /// </summary>
        private Model.Bolsa _bolsaSelecionada;

        /// <summary>
        /// Binding com o ComboBox de Bolsas.
        /// </summary>
        private ModelCollection<Model.Bolsa> _bolsas;

        /// <summary>
        /// Binding com os dados da tela.
        /// </summary>
        private Model.Preferencias _preferenciasOperador;

        /// <summary>
        /// Comunicação com Operador
        /// </summary>
        private Communication.Operador _communicationOperador;

        /// <summary>
        /// Comunicação com Negócio
        /// </summary>
        private Communication.Negocio _communicationOrdens;
        #endregion

        #region Propriedades

        public ModelCollection<Model.Bolsa> Bolsas
        {
            get { return _bolsas; }
            set { 
                _bolsas = value;
                if (_bolsas != null)
                    this.Bolsas.EnableStateControl = true;
            }
        }

        public Model.Preferencias PreferenciasOperador
        {
            get { return _preferenciasOperador;}
            set {_preferenciasOperador = value;}
        }

        public Model.Bolsa BolsaSelecionada
        {
            get { return _bolsaSelecionada; }
            set { _bolsaSelecionada = value; }
        }
        #endregion

        #region Métodos

        #region Inicializar

        public void Inicializar()
        {
            /// Task 6418 - FGualberto.7COMm
            /// Data: 20/05/2009
            /// Implementação - Manutenção de Preferências do Usuário
            this.VerificarAcessoOperador();
            this.ConsultarBolsas();
            this.ObterPreferencias();
        }

        #endregion

        #region ConsultarBolsas
        /// <summary>
        /// Consulta Bolsas de Negócio 
        /// Autor: Márcio Belarmino
        /// Data: 30/01/2009
        /// </summary>
        public void ConsultarBolsas()
        {
            try
            {
                this.Bolsas = _communicationOrdens.ConsultarBolsas();                
            }
            catch (Exception ex)
            {
                base.HandleException(ex);
            }

            // Chamando método da view que vai exibir a model
            this.View.AtualizarBolsas();
        }
        #endregion

        #region ObterPreferencias
        /// <summary>
        /// Consulta Preferências atuais do Operador
        /// Autor: Márcio Belarmino
        /// Data: 30/01/2009
        /// </summary>
        public void ObterPreferencias()
        {            
            try
            {
                if (this.PreferenciasOperador != null)
                    this.PreferenciasOperador.StopObserver();                

                this.PreferenciasOperador = _communicationOperador.ObterPreferencias(this.Session.UserId);
            }
            catch (Exception ex)
            {
                base.HandleException(ex);
            }

            // Chamando método da view que vai exibir a model
            if (this.PreferenciasOperador != null)
            {
                this.BolsaSelecionada.Codigo = this.PreferenciasOperador.Bolsa;
                this.PreferenciasOperador.StartObserver();
                this.PreferenciasOperador.SpreadChanges = true;
                this.View.AtualizarPreferencias();
            }
            
        }

        #endregion

        #region Salvar
        /// <summary>
        /// Atualiza Preferências do Operador
        /// Autor: Márcio Belarmino
        /// Data: 30/01/2009
        /// </summary>
        public void Salvar()
        {
            try
            {
                if(this.PreferenciasOperador!=null)
                    _communicationOperador.AtualizarPreferencias(this.PreferenciasOperador);
            }
            catch (Exception ex)
            {
                base.HandleException(ex);
            }
        }

        #endregion


        /// <summary>
        /// Task 6418 - FGualberto.7COMm
        /// Implementação - Manutenção de Preferências do Usuário
        /// </summary>
        private void VerificarAcessoOperador()
        {
            Model.Parameter.FiltroOperador filtro = new Sinacor.UI.Bovespa.Operador.Model.Parameter.FiltroOperador();
            filtro.CodigoOperador = base.Session.UserId;
            ModelCollection<Model.Operador> operador = _communicationOperador.ConsultarOperadores(filtro);

            if (String.IsNullOrEmpty(operador.ToString())|| operador.Count == 0 )
            {
                View.ProibirAcesso();
            }
        }

        #endregion
    }
}
